#include "common.h"
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>

typedef struct _msg
{
	long type;
	char text[100];
	char name[20];
}MSG;

int main()
{
	key_t key;
	pid_t pid;
	MSG msg;
	int msgid;

	key = ftok("./", 19);
	if(key < 0)
		err_sys("ftok error\n");

	msgid = msgget(key, IPC_CREAT | 0666);
	if(msgid < 0)
		err_sys("msgget error\n");

	pid = vfork();
	if(pid < 0)
		err_sys("fork error\n");
	else if(pid == 0)
	{
		bzero(&msg, sizeof(msg));
		printf("Input : \n");
		scanf("%ld%s%s", &msg.type, msg.text, msg.name);

		msgsnd(msgid, &msg, (sizeof(msg.text) + sizeof(msg.name)), 0);
		
	}
	else
	{
		while(msgrcv(msgid, &msg, (sizeof(msg.text) + sizeof(msg.name)), 0, IPC_NOWAIT) != -1)
		{
			if(msg.type == 5)
			{	
				printf("Message : %s\n", msg.text);
				printf("Name : %s\n", msg.name);
			}
			else
			{
				printf("Type is error, receive nothing\n");
			}
		}

		//msgctl(msgid, IPC_RMID, NULL);
		
		/*if(msgctl(msgid, IPC_RMID, NULL) == -1)
			err_sys("msgctl error\n");*/
	}

	return 0;
}
